package io.adrainty.bolee.security.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import io.adrainty.bolee.framework.commons.user.DataSecurityEntity;
import io.adrainty.bolee.framework.commons.user.UserEntity;
import io.adrainty.bolee.security.models.entity.RoleEntity;
import io.adrainty.bolee.security.models.valobj.UserTypeEnum;

import java.util.List;

/**
 * <p>IUserService</p>
 *
 * @author AdRainty
 * @version V1.0.0
 * @description IUserService
 * @since 2025/8/7 11:29:12
 */
public interface IUserService {

    /**
     * 根据用户名查找用户
     *
     * @param userTypeEnum 用户类型
     * @param username     用户名
     * @param company      公司编号
     * @return 用户信息
     */
    UserEntity findUserByUsername(UserTypeEnum userTypeEnum, String username, String company);

    /**
     * 根据手机号查找用户
     *
     * @param userTypeEnum 用户类型
     * @param mobile       手机号
     * @param company      公司编号
     * @return 用户信息
     */
    UserEntity findUserByMobile(UserTypeEnum userTypeEnum, String mobile, String company);

    /**
     * 根据微信openId查找用户
     *
     * @param userTypeEnum 用户类型
     * @param openId       微信openId
     * @param company      公司编号
     * @return 用户信息
     */
    UserEntity findUserByOpenId(UserTypeEnum userTypeEnum, String openId, String company);

    /**
     * 创建用户
     *
     * @param userEntity 用户信息
     * @return 用户信息
     */
    UserEntity createUser(UserEntity userEntity);

    /**
     * 查找用户数据权限
     *
     * @param userId 用户id
     * @param roleVOs 角色信息
     * @return 用户数据权限
     */
    DataSecurityEntity findUserDataSecurity(Long userId, List<RoleEntity> roleVOs);

    /**
     * 查找用户
     *
     * @param entity 查询条件
     * @return 用户信息
     */
    IPage<UserEntity> findUserPage(UserEntity entity, Integer pageNum, Integer pageSize);

    /**
     * 修改用户
     *
     * @param entity 用户信息
     * @return 修改结果
     */
    UserEntity updateUser(UserEntity entity);

    /**
     * 创建用户
     *
     * @param entity 用户信息
     * @return 创建结果
     */
    List<UserEntity> listUser(UserEntity entity);
}
